﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Configuration.Internal;
using System.Net.Configuration;
using System.Diagnostics;
using System.Text.RegularExpressions;
using System.Threading;
using Filmy.Kontroler;
using Filmy.Kontroler.BazaDanych;

namespace Filmy
{
    public partial class Fnowy : Form
    {
        public Fnowy()
        {
            zainicjuj();
            TbUzytkownik.Text = Uzytkownicy.loginUzytkownika;
            btDodajwersje.Enabled = false;
            btUsunWersje.Enabled = false;
        }
        
        public Fnowy(string tor, string wersja, string tytul)
        {
            zainicjuj();
            TbWersja.Text = wersja;
            TbTor.Text = tor;
            TbTytul.Text = tytul;
            TbUzytkownik.Text = Uzytkownicy.loginUzytkownika;
            btDodajwersje.Enabled = false;
        }

        public Fnowy(int idFilmyTytuly)
        {
            zainicjuj();
            _idFilmyTytuly = idFilmyTytuly;
            edycja = true;

            TbWersja.ReadOnly = true;
            try
            {
                zainicjujZamienne();
                zaladujDane(true);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                this.Close();
            }
        }

        Uzytkownicy uzytkownicy;
        Rezyserowie rezyserowie;
        KrajePochodzenia krajePochodzenia;
        Gatunki gatunki;
        FilmyTytuly filmyTytuly;
        tFilmy tfilmy;

        bool edycja = false;
        int _idFilmyTytuly;
        Walidacja wal;
        Image domyslyObrazek;
        int idFilmu;

        private void zainicjuj()
        {
            InitializeComponent();
            domyslyObrazek = pictureBox1.Image;
            ofdTorrent.InitialDirectory = Path.GetTempPath();
        }

        private void zainicjujZamienne()
        {
            //zainicjowanie zmiennych zawierajacych dane do updata
            tfilmy = new tFilmy();
            filmyTytuly = new FilmyTytuly();
            gatunki = new Gatunki();
            krajePochodzenia = new KrajePochodzenia();
            rezyserowie = new Rezyserowie();
            uzytkownicy = new Uzytkownicy();
        }


        private void zaladujDane(bool pierwszyRaz)
        {
            //Uzupelnienie danymi

            /*DataTable dtG = new DataTable();
            dtG = gatunki.dajTabele();
            DataTable dtR = new DataTable();
            dtR = rezyserowie.dajTabele();
            DataTable dtK = new DataTable();
            dtK = krajePochodzenia.dajTabele();*/
            TbTytul.Text = filmyTytuly.dajPole(_idFilmyTytuly, "Tytul");
            TbTytAng.Text = filmyTytuly.dajPole(_idFilmyTytuly, "TytulOrg");
            if (pierwszyRaz)
            {
                lbWersja.Items.Clear();
                tfilmy.dajWersje(_idFilmyTytuly, lbWersja);
                lbWersja.SelectedIndex = 0;
            }
            TbWersja.Text = lbWersja.SelectedItem.ToString();
            RTbLink.Text = tfilmy.dajPole(lbWersja.SelectedItem.ToString(), "Link").ToString();
            btUsun.Text = tfilmy.dajPole(lbWersja.SelectedItem.ToString(), "CzasTrwania").ToString();
            tbOpis.Text = tfilmy.dajPole(lbWersja.SelectedItem.ToString(), "Opis").ToString();
            TbRokProd.Text = tfilmy.dajPole(lbWersja.SelectedItem.ToString(), "RokProdukcji").ToString();
            TbTor.Text = tfilmy.dajPole(lbWersja.SelectedItem.ToString(), "Torrent").ToString();
            TbOcena.Text = tfilmy.dajPole(lbWersja.SelectedItem.ToString(), "Ocena").ToString();
            dtpDataDodania.Value = DateTime.Parse(tfilmy.dajPole(lbWersja.SelectedItem.ToString(), "DataDodania").ToString());
            tfilmy.pobierzObrazek(pictureBox1, lbWersja.SelectedItem.ToString(), "Obrazek", TbTytul.Text);
            idFilmu = Convert.ToInt16(tfilmy.dajPole(lbWersja.SelectedItem.ToString(), "idFSz"));
            TbGatunek.Text = gatunki.dajPoIdFilmu(_idFilmyTytuly);
            tbRezyseria.Text = rezyserowie.dajPoIdFilmu(idFilmu);
            tbKraj.Text = krajePochodzenia.dajPoIdFilmu(idFilmu);
            TbUzytkownik.Text = uzytkownicy.dajPole(Convert.ToInt16(tfilmy.dajPole(lbWersja.SelectedItem.ToString(), "Urzytkownicy_idUrzytkownika")), "Login");
        }

        private void BtOK_Click(object sender, EventArgs e)
        {
            try
            {
                wal = new Walidacja();
                bool ok = true, walidacjaOk = true;
                walidacjaOk = wal.walidacja(ok, TbRokProd, btUsun, TbOcena, RTbLink, TbTytul, TbWersja);

                if (walidacjaOk)
                {
                    if (edycja)
                    {
                        filmyTytuly.update(TbTytul.Text, TbTytAng.Text, TbOcena.Text, _idFilmyTytuly);
                        tfilmy.deleteRow(idFilmu);
                    }
                    else
                    {
                        zainicjujZamienne();
                    }

                    //insert do tabeli TytulyFimy
                    bool czyDodano = filmyTytuly.addNewOrId(TbTytul.Text, TbTytAng.Text, TbOcena.Text);

                    //insert do tabeli Gatunki
                    if (czyDodano)
                    {
                        Gatunki gatunki = new Gatunki();
                        gatunki.addNewOrId(TbGatunek.Text);
                    }

                    //ustawienie uzytkownika
                    Uzytkownicy uzytkownicy = new Uzytkownicy();
                    uzytkownicy.pobierzIdUzytkownika(TbUzytkownik.Text);

                    //insert do tabeli Filmy
                    tFilmy filmy = new tFilmy();
                    czyDodano = filmy.addNewOrId(btUsun.Text, TbWersja.Text, TbRokProd.Text, RTbLink.Text, dtpDataDodania.Value.ToShortDateString(), TbOcena.Text, TbTor.Text, pictureBox1, tbOpis.Text);

                    if (czyDodano)
                    {
                        //insert do tabeli Rezyserowie
                        Rezyserowie rezyserowie = new Rezyserowie();
                        rezyserowie.addNewOrId(tbRezyseria.Text);

                        //insert do tabeli KrajePochodzenia
                        KrajePochodzenia krajePochodzenia = new KrajePochodzenia();
                        krajePochodzenia.addNewOrId(tbKraj.Text);
                        this.DialogResult = DialogResult.OK;
                        this.Close();
                    }
                    else
                        MessageBox.Show("Podany film znajduje się już w bazie");             
                    
                }
                else
                {
                    MessageBox.Show("Nie można dodać filmu, formularz został niepoprawnie wypełniony", "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void BtAnuluj_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;
            this.Close();
        }

        //pobranie danych do formularza za pomoca wczesniej podanego linku
        private void button1_Click_2(object sender, EventArgs e)
        {
            filmweb(false, TbTytul.Text);
        }

        //otwarcie przegladarki po klilnieciu na link
        private void RTbLink_LinkClicked_1(object sender, LinkClickedEventArgs e)
        {
            Process proc = Process.Start(e.LinkText);
        }

        private string regx(string zrodlo, string text)
        {
            Regex regexObj = new Regex(text);
            string result = regexObj.Match(zrodlo).Groups[1].Value;
            return result.Replace("&oacute;", "ó");
        }

        //pobranie danych do formularza za pomoca filmwebu
        private void filmweb(bool poLinku, string doZnalezienia)
        {
            Cursor.Current = Cursors.WaitCursor;
            Filmweb fw = new Filmweb();
            try
            {
                fw.filmweb(doZnalezienia, poLinku);
                RTbLink.Text = fw.link;
                TbTytul.Text = fw.tytul;
                TbRokProd.Text = fw.rokProdukcji;
                TbTytAng.Text = fw.tytulOryginalny;
                TbOcena.Text = fw.ocena;
                TbGatunek.Text = fw.gatunki;
                btUsun.Text = fw.czasTrwania;
                pictureBox1.ImageLocation = fw.obrazek;
                pictureBox1.SizeMode = fw.opcjaWyswietlania;
                tbRezyseria.Text = fw.rezyserowie;
                tbKraj.Text = fw.krajePochodzenia;
                tbOpis.Text = fw.opis;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Błąd");
            }
            Cursor.Current = Cursors.Default;
        }

        //wywolanie pobrania danych do formularza w przyadku klikniecia enter na poli tytul
        private void TbTytul_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)13)
            {
                filmweb(false, TbTytul.Text);
            }
        }

        //wywolanie pobrania danych do formularza w przyadku klikniecia enter na poli linku
        private void RTbLink_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)13)
            {
                filmweb(true, RTbLink.Text);
            }
        }

        //Wyswietlenie duzego obrazka tytulowego
        private void pictureBox1_Click(object sender, EventArgs e)
        {
            if (pictureBox1.Image != domyslyObrazek)
            {
                string tytul = TbTytul.Text;
                tytul = tytul.Replace(":", "");
                tytul = tytul.Replace(";", "");
                tytul = tytul.Replace(",", "");
                tytul = tytul.Replace(".", "");
                if (tytul.Length > 0)
                {
                    Fobrazek nowy = new Fobrazek(tytul);
                    nowy.Show();
                }
            }
        }

        //zmiana koloru textboxow z powrotem na biały w przypadku niepoprawnego wypelnienie folmularza
        private void TbRokProd_TextChanged(object sender, EventArgs e)
        {
            TbRokProd.BackColor = Color.White;
        }

        private void RTbLink_TextChanged(object sender, EventArgs e)
        {
            RTbLink.BackColor = Color.White;
        }

        private void TbCzasTrw_TextChanged(object sender, EventArgs e)
        {
            btUsun.BackColor = Color.White;
        }

        private void TbOcena_TextChanged(object sender, EventArgs e)
        {
            TbOcena.BackColor = Color.White;
        }

        private void TbTytul_TextChanged(object sender, EventArgs e)
        {
            TbTytul.BackColor = Color.White;
        }

        private void TbWersja_TextChanged(object sender, EventArgs e)
        {
            TbWersja.BackColor = Color.White;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (RTbLink.Text.Length > 0)
                filmweb(true, RTbLink.Text);
        }


        //pobranie danych z imdb
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                Imdb imdb = new Imdb();
                imdb.DajDaneImdb(TbTytul.Text);
                TbTytAng.Text = imdb.tytul;
                TbTytul.Text = imdb.tytulOryginalny;
                TbRokProd.Text = imdb.rokProdukcji;
                TbGatunek.Text = imdb.gatunki;
                btUsun.Text = imdb.czasTrwania;
                TbOcena.Text = imdb.ocena;
                RTbLink.Text = imdb.link;
                tbOpis.Text = imdb.opis;
                tbRezyseria.Text = imdb.rezyserowie;
                pictureBox1.ImageLocation = imdb.obrazek;
                pictureBox1.SizeMode = imdb.opcjaWyswietlania;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        //dodanie nowej wersji podczas edycji
        private void btDodajwersje_Click(object sender, EventArgs e)
        {
            TbWersja.Clear();
            TbTor.Clear();
            dtpDataDodania.Value = DateTime.Today;
            TbWersja.ReadOnly = false;
            edycja = false;
            TbWersja.Focus();
            btUsunWersje.Enabled = false;
        }



        private void lbWersja_SelectedValueChanged(object sender, EventArgs e)
        {
            zaladujDane(false);
            TbWersja.ReadOnly = true;
            edycja = true;
            btUsunWersje.Enabled = true;
        }

        private void btUsunWersje_Click(object sender, EventArgs e)
        {

            if (lbWersja.Items.Count == 1)
            {
                filmyTytuly = new FilmyTytuly();
                filmyTytuly.deleteRow(new List<int> {_idFilmyTytuly });
                this.DialogResult = DialogResult.OK;
                this.Close();
            }
            else
            {
                tfilmy = new tFilmy();
                tfilmy.deleteRow(idFilmu);
                zaladujDane(true);
                TbWersja.ReadOnly = true;
                edycja = true;
            }
        }

        private void cbKraj_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (tbKraj.Text.Length > 0)
            {
                tbKraj.Text += ", " + cbKraj.SelectedItem.ToString();
            }
            else
                tbKraj.Text = cbKraj.SelectedItem.ToString();
        }

        private void cbRezyseria_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (tbRezyseria.Text.Length > 0)
            {
                tbRezyseria.Text += ", " + cbRezyseria.SelectedItem.ToString();
            }
            else
                tbRezyseria.Text = cbRezyseria.SelectedItem.ToString();
        }

        private void cbGatunek_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (TbGatunek.Text.Length > 0)
            {
                TbGatunek.Text += ", " + cbGatunek.SelectedItem.ToString();
            }
            else
                TbGatunek.Text = cbGatunek.SelectedItem.ToString();
        }
    }
}
